package socketmvc.core.config;

import socketmvc.core.codec.IPacketCodec;
import socketmvc.core.codec.ProtocolCodecHandler;
import socketmvc.core.filter.FilterHandler;
import socketmvc.core.filter.IFilter;
import socketmvc.core.processor.ProcessorMethodHandler;
import java.util.Collection;
import java.util.List;
import java.util.Set;

public interface SocketMvcConfig {

    IpConfig getIpConfig();

    /**
     * 获取扫描处理器的包路径
     * @return 包路径
     */
    Set<String> getProcessorScanPackage();

    /**
     * 获取过滤器
     * @return Filters
     */
    Collection<IFilter> getFilters();

    /**
     * 获取数据包编解码器
     * @return Codecs
     */
    Collection<IPacketCodec> getPacketCodecs();

    /**
     * 获取mvc方法映射处理器(处理类方法和注解的mvc路径的对应关系以及其参数类型映射等等)
     * @return ProcessorMethodHandler
     */
    ProcessorMethodHandler getProcessorMethodHandler();

    /**
     * 获取报文的协议编解码器
     * @return ProtocolCodecHandler
     */
    ProtocolCodecHandler getProtocolCodecHandler();

    /**
     * 获取mvc过滤器
     * @return ProtocolCodecHandler
     */
    FilterHandler getFilterHandler();


    interface IpConfig{
        /**
         * 获取ip配置是否启用
         * @return 是否启用
         */
        boolean isEnable();
        /**
         * 获取ip配置协议类型
         * @return 协议类型
         */
        IpConfigType getType();

        /**
         * 获取配置唯一标识
         * @return 唯一标识
         */
        String getId();
        /**
         * 获取绑定ip
         * @return ip
         */
        String getHost();
        /**
         * socket 端口
         * @return 端口
         */
        int getPort();
        /**
         * 获取socket ssl配置
         * @return ssl配置
         */
        SSL getSsl();
    }

    /**
     * SSL配置项目
     */
    interface SSL{
       String getKeyStoreFile();
       String getTrustStoreFile();
       String getPassword();
    }
}
